package polymorphic;

/**
 * Created by pc on 2015/2/4.
 * 多态只对方法管用，对成员变量不管用，总是调用父类的成员变量
 * 多态也就是编译时的成员变量，但是是运行时的成员函数
 * 对方法来说，继承来的会访问子类的方法，父类独有的则是访问父类的方法
 */
class PolyBase {
    private String name = "老子";
    private String brotherName = "叔叔";
    public String wifeName = "老妈";

    public String getName() {
        return name;
    }
    public String getBrotherName() {
        return brotherName;
    }
    protected void work() {
        System.out.println("务农");
    }
}

public class PolySubDemo extends PolyBase {
    private String name = "儿子";
    public String wifeName = "冰冰";

    @Override
    protected void work() {
        System.out.println("开银行");
    }

    @Override
    public String getName() {
        return name;
    }

    //子类独有的方法是没法在多态编译时引用到的
    public void travel() {
        System.out.println("出国旅游一趟");
    }

    public static void main(String args[]) {
        //向上转型了，会调用子类覆盖了的成员方法
        PolyBase man = new PolySubDemo();
        System.out.println(man.getName());
        //对成员变量来说只会调用父类的成员变量
        System.out.println(man.wifeName);
        //继承的方法会访问运行时子类的方法
        man.work();
        //依然可以访问父类的独有方法
        System.out.println(man.getBrotherName());

        //向下转型成儿子
        PolySubDemo man2 = (PolySubDemo) man;
        System.out.println(man2.wifeName);
        man2.travel();

        char jjj = (char) 23435465;
        System.out.println(jjj);


    }
}
